package cn.tedu.blog.server.service;

import cn.tedu.blog.server.pojo.dto.ArticleAddNewDTO;
import cn.tedu.blog.server.pojo.dto.ArticleEditDTO;
import cn.tedu.blog.server.pojo.dto.ArticleExamineNewDTO;
import cn.tedu.blog.server.pojo.dto.PageDTO;
import cn.tedu.blog.server.pojo.vo.*;
import cn.tedu.blog.server.pojo.dto.PrasieNewDTO;
import cn.tedu.blog.server.pojo.vo.ApiArticleListItemVO;
import cn.tedu.blog.server.pojo.vo.ArticleAdminDetailVO;
import cn.tedu.blog.server.pojo.vo.ArticleDetailVO;
import cn.tedu.blog.server.pojo.vo.ArticleStandardVO;
import cn.tedu.blog.server.utils.JsonPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

public interface IArticleService  {
//    @Transactional
//    void addNew(ArticleAddNewDTO addNewDTO);

    /**
     * 根据id删除文章
     * @param id
     */
  
    void deleteById(long id);

    /**
     * 根据多个id批量删除文章
     * @param ids
     */
    int deleteByIds(Long[] ids);

    /**
     * 根据id修改文章
     * @param
     * @return
     */
    void update(long id, ArticleEditDTO articleEditDTO);

    ArticleDetailVO  adminSelect(Long id);



    List<ArticleAdminDetailVO> adminSelectFindAll(ArticleAdminDetailVO articleAdminDetailVO);

    @Transactional
    void addNew(ArticleAddNewDTO addNewDTO);


    // 添加文章审核记录
    @Transactional
    void createExamineStatus(ArticleExamineNewDTO articleExamineNewDTO);



    int selectCount(ArticleAdminDetailVO articleAdminDetailVO);
    /*  -------前台部分-------  */

    /**
     * 根据分类id分页查询文章
     * @param categoryId
     * @return
     */
    JsonPage<ApiArticleListItemVO> listArticlesByCategoryId(Long categoryId, PageDTO pageDTO);


    /**
     * 最新文章查询
     * @return
     */
    List<ArticleStandardVO> selectNewestArticle();
    /**
     * 热门文章查询
     * @return
     */
    List<ArticleStandardVO> selectPopularArticle();
    /**
     * 管理员推荐文章查询
     * @return
     */
    List<ArticleStandardVO> selectIsRecommendArticle();

    /**
     * 查询文章列表
     * @return
     */
    JsonPage<ArticleStandardVO> selectArticleLists(Integer pageNum, Integer pageSize);


    /**
     * 查询文章数量
     * @return
     */
    Long  selectArticleCount();

    /*文章分页查询，前台ES*/
    JsonPage<ArticleStandardVO> getArticleByPage(Integer pageNum , Integer pageSize);

    /*查询文章总数*/
    Long articleCount();


    /**
     * 查询用户个人文章
     * @return 个人文章列表
     */
    List<ArticlePersonalDetailVO> saveArticlePersonalDetail(int pagSiza, int auditStatus);

    void updatePrasieById(PrasieNewDTO prasieNewDTO);
    /**
     *  获取用户发表的文章数
     * @return 用户发表的文章数
     */
    int countArticleByUserId(int auditStatus);

    /**
     *  多表查询用户收藏文章
     * @return 用户收藏文章数据
     */
    List<FavoriteArticleVO> getCollectionArticle(int pagSize);

    /*根据分类id查询文章数量*/
    Long countArticleByCategoryId(Long categoryId);

    /*根据文章标签id查询文章*/
    JsonPage<ApiArticleListItemVO> listArticlesByTagId(Long tagId, PageDTO pageDTO);
    /*根据标签id查询文章数据*/
    Long countArticleBytagId(Long tagId);

    /*查询文章浏览量*/
   int selectViewCount(Long id);
}
